home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Power 1997 December
/
MACPOWER-1997-12.ISO.7z
/
MACPOWER-1997-12.ISO
/
AMUG
/
PROGRAMMING
/
Raven 1.2 Examples.sit
/
Raven 1.2 Examples
/
Quill
/
Source
/
TextTraitsNode.cpp
< prev
next >
Wrap
Text File
|
1997-02-07
|
6KB
|
251 lines
/*
* File: TextTraitsNode.cpp
* Summary: A node representing a text traits resource for use in a THierarchicalTable.
* Written by: Jesse Jones
*
* Copyright ゥ 1997 Jesse Jones.
* For conditions of distribution and use, see copyright notice in ZTypes.h
*
* Change History (most recent first):
*
* <-> 1/23/96 JDJ Created
*/
#include "TextTraitsNode.h"
#include <ZHandleStream.h>
#include <ZStringUtils.h>
#include <ZUndoableCommand.h>
#include "TextTraitsDialog.h"
// ===================================================================================
// Internal Functions
// ===================================================================================
//---------------------------------------------------------------
//
// operator>> (TTextTrait)
//
//---------------------------------------------------------------
static TInStream& operator>>(TInStream& stream, TTextTrait& value)
{
if (stream.IsTagged())
VERIFY(stream.ReadTag() == 'Txtr');
STextTrait traits;
stream.ReadBytes(&traits, sizeof(STextTrait));
value = traits;
return stream;
}
//---------------------------------------------------------------
//
// operator<< (TTextTrait)
//
//---------------------------------------------------------------
static TOutStream& operator<<(TOutStream& stream, const TTextTrait& value)
{
#if DEBUG
if (stream.IsTagged())
stream.WriteTag('Txtr');
#endif
STextTrait record = value.GetTraits();
stream.WriteBytes(&record, sizeof(STextTrait));
return stream;
}
#pragma mark -
// ===================================================================================
// class CChangeTraitsCommand
// ===================================================================================
class CChangeTraitsCommand : public TUndoableCommand {
typedef TUndoableCommand Inherited;
//-----------------------------------
// Initialization/Destruction
//
public:
virtual ~CChangeTraitsCommand();
CChangeTraitsCommand(CResourceMap* rsrcMap, ResID id, const TTextTrait& newTraits);
//-----------------------------------
// Inherited API
//
public:
virtual string GetText() const;
protected:
virtual void OnDo();
virtual void OnUndo();
virtual void OnRedo();
//-----------------------------------
// Member data
//
protected:
CResourceMap* mRsrcMap;
ResID mID;
THandle mOldData;
THandle mNewData;
};
//---------------------------------------------------------------
//
// CChangeTraitsCommand::~CChangeTraitsCommand
//
//---------------------------------------------------------------
CChangeTraitsCommand::~CChangeTraitsCommand()
{
}
//---------------------------------------------------------------
//
// CChangeTraitsCommand::CChangeTraitsCommand
//
//---------------------------------------------------------------
CChangeTraitsCommand::CChangeTraitsCommand(CResourceMap* rsrcMap, ResID id, const TTextTrait& newTraits)
{
ASSERT(rsrcMap != nil);
mRsrcMap = rsrcMap;
mID = id;
mOldData = mRsrcMap->GetResourceData(mID);
mOldData.Detach();
TOutHandleStream stream;
stream << newTraits;
mNewData = stream.GetHandle();
}
//---------------------------------------------------------------
//
// CChangeTraitsCommand::GetText
//
//---------------------------------------------------------------
string CChangeTraitsCommand::GetText() const
{
return LoadIndString(256, 28);
}
//---------------------------------------------------------------
//
// CChangeTraitsCommand::OnDo
//
//---------------------------------------------------------------
void CChangeTraitsCommand::OnDo()
{
mRsrcMap->SetResourceData(mID, mNewData);
}
//---------------------------------------------------------------
//
// CChangeTraitsCommand::OnUndo
//
//---------------------------------------------------------------
void CChangeTraitsCommand::OnUndo()
{
mRsrcMap->SetResourceData(mID, mOldData);
}
//---------------------------------------------------------------
//
// CChangeTraitsCommand::OnRedo
//
//---------------------------------------------------------------
void CChangeTraitsCommand::OnRedo()
{
mRsrcMap->SetResourceData(mID, mNewData);
}
#pragma mark -
// ===================================================================================
// class CTextTraitsNode
// ===================================================================================
//---------------------------------------------------------------
//
// CTextTraitsNode::~CTextTraitsNode
//
//---------------------------------------------------------------
CTextTraitsNode::~CTextTraitsNode()
{
}
//---------------------------------------------------------------
//
// CTextTraitsNode::CTextTraitsNode (THierarchicalTable*, CResourceMap*)
//
//---------------------------------------------------------------
CTextTraitsNode::CTextTraitsNode(THierarchicalTable* table, CResourceMap* rsrcMap) : CResourceNode(table, rsrcMap)
{
}
//---------------------------------------------------------------
//
// CTextTraitsNode::CTextTraitsNode (THierarchicalTable*, TSubNode*, CResourceMap*, ResID)
//
//---------------------------------------------------------------
CTextTraitsNode::CTextTraitsNode(THierarchicalTable* table, TSubNode* parent, CResourceMap* rsrcMap, ResID id) : CResourceNode(table, parent, rsrcMap, id)
{
}
//---------------------------------------------------------------
//
// CTextTraitsNode::Make
//
//---------------------------------------------------------------
CResourceNode* CTextTraitsNode::Make(TSubNode* parent, ResID id)
{
return new CTextTraitsNode(mTable, parent, mRsrcMap, id);
}
//---------------------------------------------------------------
//
// CTextTraitsNode::EditResource
//
//---------------------------------------------------------------
void CTextTraitsNode::EditResource()
{
TTextTrait oldTraits, newTraits;
THandle data = mRsrcMap->GetResourceData(mID);
if (data.GetSize() > 0) {
TInHandleStream stream(data);
stream >> oldTraits;
}
if (CTextTraitsDialog::Pose(mRsrcMap->GetResourceName(mID), oldTraits, &newTraits)) {
TCommand* command = new CChangeTraitsCommand(mRsrcMap, mID, newTraits);
command->Post();
}
}